# ifndef FUNCTION_H
# define FUNCTION_H

# include<limits>

const double _eps = 1000 * std::numeric_limits<double>::epsilon();

/**
* @brief 定义一个抽象函数类，用于规范仿函数的接口以及给派生类提供求导数运算。
* 
*/
class Function
{
public:
    virtual double operator() (const double & _x) const = 0;

    // 求导数运算
    virtual double diff(const double & _x) const
    {
        return ((*this)(_x + _eps) - (*this)(_x)) / _eps;
    }
};


# else
// Do nothing
#endif